#include <iostream>
#include <array>

constexpr int GetValue(int p)
{
    return p;
}

// constexpr void func()
// {
// }

constexpr int func1(int p) 
{
    // if (p > 0)
    //     return p;
    // else 
    //     return 0;

    return p > 0 ? p : 0;
}

// constexpr int func2(int p)
// {
//     return p++;
// }

class B {
public:
    ~B() {}
};

class A {
private:
    int a;
    //B b;

public:
    constexpr A(int a) : a(a) {  }

    //~A() {}
    ~A() = default;

public:
    constexpr int geta() const { return a; }

    constexpr void seta(int p) { a = p; }
};

constexpr A GetA()
{
    A a(10);
    a.seta(20);

    return a;
}

int main() {
    int sz = 1;
    const int csz = sz;

    //constexpr int cprsz = sz;

    constexpr int cprsz = 1;

    const int csz1 = 1;
    constexpr int cprsz1 = csz1;

    std::array<int, 10> arr;
    
    constexpr int arrSize = 10;
    std::array<int, arrSize> arr1;

    //编译期常量语境:
    //constexpr int a = GetValue(10);

    int b = 0;
    //constexpr int b1 = GetValue(b);

    int c = 10;
    int c1 = GetValue(c);

    constexpr A a(10);
    a.geta();


    constexpr A a1 = GetA();

    return 0;
}